﻿Public Class FormInsererTexteMarqueur

    Private oMarqueurActif As ClassMarqueur = Nothing

    Private Sub FormInsererTexteMarqueur_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
        'Ajuster la font
        Me.RichTextBox1.Font = Form1.RichTextBox1.Font
        'Actualiser la liste des marqueurs disponibles
        Me.ComboBox1.Items.Clear()
        Me.oMarqueurActif = Nothing
        Me.LabelRegex.Text = ""
        For Each oItem As ListViewItem In Form1.ListViewMarqueurs.Items
            Me.ComboBox1.Items.Add(oItem.Text)
        Next
        Me.ComboBox1.Text = ""
        'Si le texte sélectionné correspond à marqueur
        If Me.ComboBox1.Text = "" And Form1.RichTextBox1.SelectedText <> "" Then
            Dim oMarqueur As ClassMarqueur
            For Each oItem As ListViewItem In Form1.ListViewMarqueurs.Items
                oMarqueur = oItem.Tag
                If oMarqueur.Test(Form1.RichTextBox1.SelectedText) Then
                    Me.ComboBox1.Text = oMarqueur.Titre
                    Me.RichTextBox1.Text = Form1.RichTextBox1.SelectedText
                    Exit For
                End If
            Next
        End If
        'Si le texte sélectionné contient un nom de marqueur
        If Me.ComboBox1.Text = "" And Form1.RichTextBox1.SelectedText <> "" Then
            Dim oMarqueur As ClassMarqueur
            For Each oItem As ListViewItem In Form1.ListViewMarqueurs.Items
                oMarqueur = oItem.Tag
                If Form1.RichTextBox1.SelectedText.ToUpper.Contains(oMarqueur.Titre.ToUpper) Then
                    Me.ComboBox1.Text = oMarqueur.Titre
                    Call Reinit()
                    Exit For
                End If
            Next
        End If
        'Sinon, si il y a un marqueur sélectionné, on le prend comme défaut
        If Me.ComboBox1.Text = "" And Form1.ListViewMarqueurs.SelectedItems.Count > 0 Then
            Me.ComboBox1.Text = Form1.ListViewMarqueurs.SelectedItems(0).Text
        End If
        If Me.ComboBox1.Text = "" And Me.ComboBox1.Items.Count > 0 Then Me.ComboBox1.Text = Me.ComboBox1.Items(0)
    End Sub

    Private Sub RichTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged
        Call AppliquerMarqueur()
    End Sub

    Private Sub AppliquerMarqueur()
        If Me.oMarqueurActif IsNot Nothing Then
            Dim iPos As Integer = Me.RichTextBox1.SelectionStart
            Me.RichTextBox1.SelectAll()
            Me.RichTextBox1.SelectionColor = Color.Black
            Me.RichTextBox1.SelectionBackColor = Color.White
            Me.oMarqueurActif.Marquer(Me.RichTextBox1)
            Me.RichTextBox1.SelectionLength = 0
            Me.RichTextBox1.SelectionStart = iPos
            'Afficher les submatches
            Me.LabelGroupes.Text = oMarqueurActif.SubMatchesToString(Me.RichTextBox1.Text, False)
            Me.ButtonOk.Enabled = Me.oMarqueurActif.Test(Me.RichTextBox1.Text)
        End If
    End Sub

    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
        Me.oMarqueurActif = Form1.ListViewMarqueurs.Items(Me.ComboBox1.Text).Tag
        Me.LabelRegex.Text = "Expression: " & Me.oMarqueurActif.Masque
        If Me.oMarqueurActif.Condition <> "" Then Me.LabelRegex.Text &= vbCrLf & "Condition:  " & Me.oMarqueurActif.Condition
        Call Me.AppliquerMarqueur()
    End Sub

    Private Sub ButtonOk_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonOk.Click
        If Me.oMarqueurActif.Test(Me.RichTextBox1.Text) Then
            'On traite le dialogresult manuellement parce qu'on veut autoriser le Enter dans le richtextbox1
            Me.DialogResult = Windows.Forms.DialogResult.OK
            Me.Close()
        Else
            MsgBox("Le texte n'est pas conforme au marqueur sélectionné", MsgBoxStyle.Exclamation)
            Exit Sub
        End If
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Call Reinit()
    End Sub

    Private Sub Reinit()
        Try
            Me.RichTextBox1.Text = System.Text.RegularExpressions.Regex.Unescape(Me.LabelRegex.Text)
        Catch Ex As Exception
            Me.RichTextBox1.Text = ""
        End Try
    End Sub
End Class